package com.jml.蚂蚁.netty.String序列化client;


import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

/**
 * @author:jml
 * @date: 2019/12/24 11:03
 * @description：
 */
//这里定义泛型为String类型，那么接收的数据就都是String类型
public class ClientHandler extends SimpleChannelInboundHandler<String> {
	
	/*netty底层是通过NIO通信的，默认是bytebuf通信，
	 *如果想直接用字符串传递就需要使用Netty的编码和解码不能直接使用字符串
	 * 这里使用了泛型String就需要使用Netty的编码和解码器，否则客户端和服务端是接收不到数据的
	 *服务端和客户端都需要进行发送和接收数据，所有都需要加码和解码
	 * 需要加入ch.pipeline().addLast(new StringEncoder());
	 * ch.pipeline().addLast(new StringDecoder());
	 */
	
	/**
	 * @Description:活跃的通道,客户端发送消息
	 * @param ctx
	 * @return:void
	 */
	@Override
	public void channelActive(ChannelHandlerContext ctx) throws Exception {
		ctx.writeAndFlush((Unpooled.copiedBuffer("客户端发送消息\n", CharsetUtil.UTF_8)));
	}
	
	/**
	 * @Description:读取消息
	 * @param ctx
	 * @param msg
	 * @return:void
	 */
	@Override
	protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
		System.out.println("客户端获取服务器端响应的消息：" + msg);
	}
}
